%-----------------------------------------------------------------------------
\chapter{Einleitung}
%-----------------------------------------------------------------------------

%-----------------------------------------------------------------------------
\section{Motivation}
%-----------------------------------------------------------------------------
ProgrammiererInnen verwenden Code Snippets aus verschiedensten Gründen, jedoch
immer mit dem Ziel, Produktivität zu steigern und die geforderte Software-
Qualität einzuhalten \cite[S.1]{Wigh12}.
\newline
\newline
In der kommerziellen Software-Entwicklung äußert sich eine gesteigerte
Produktivität in der Reduzierung der Entwicklungszeit.
Unter anderem kann dies erreicht werden, wenn man Codeteile, die man öfters
benötigt, in einer Code Snippet Collection speichert. Durch die Verwendung eines
Code Snippets erspart man sich die "`Tipparbeit"'. Hier sollte die Suche
eines passenden Code Snippets leicht sein, weil man Titel und
Bezeichnung beim Speichern des Code Snippets selbst vergeben hat.
Eine andere Möglichkeit, die Produktivität in der Software-Entwicklung zu
steigern ist, sich Programmlogiken für komplizierte Codeteile wie z.B. einen
Sortieralgorithmus nicht selbst zu überlegen, sondern aus einem Code Snippet zu
übernehmen. Wie in unserer Informationswelt mittlerweile üblich, liefert das
Internet unzählige Code Snippets für sehr viele Herausforderungen. Also ist die
entscheidende Frage, die man sich stellen muss, wie man aus der Fülle
von Angeboten das Code Snippet herausfiltern kann, das am Besten zur
Programmierherausforderung passt, die geforderte Qualität erfüllt und den
geringsten Änderungsaufwand für die Verwendung im eigenen Source-Code benötigt.
\newline
\newline
Um in der kommerziellen Software-Entwicklung einen Nutzen aus
der Verwendung eines Code Snippets ziehen zu können, muss der Zeitaufwand für
die Suche, die Auswahl des Code Snippets und das Ändern desselben geringer sein,
als der Programmieraufwand, den Code selbst zu schreiben.
\newline
\newline
In der Lehre zeigt sich eine Steigerung der  Produktivität durch die
Reduzierung der Zeit, die für das Erlernen einer Programmiersprache benötigt wird.
Neben dem Lernen von Syntax und Befehlen ist das Ansehen, Verstehen und
Anpassen von gut geschriebenen Codes ein wesentlicher Bestandteil beim Erlernen.
Dabei ist die entscheidende Herausforderung bei der Suche nach
Codebeispielen, aus dem Überangebot im Internet jenes herauszufiltern, das am
Besten zum aktuellen Niveau des/der Lernenden passt.
\newline
\newline
Um in der Lehre einen Nutzen aus der Verwendung eines Code Snippets ziehen zu
können, muss das Codebeispiel für die/den Lernenden herausfordernd, darf aber
nicht überfordernd sein.
\newline
\newline
Die Verwendung eines Code Snippets läuft im Idealfall nach folgendem Schema
ab:
\begin{enumerate}
	\item Erstellen einer Suchabfrage, die durch Einschränkungen z.B. auf
	Programmiersprache verfeinert wird.
	\item Sondierung des Suchergebnisses, welches Code Snippet am Besten passen
	könnte.
	\item Auswählen eines Code Snippets.
	\item Programmlogik des Code Snippets erfassen und verstehen.
	\item Anpassen des Code Snippets z. B. durch Angleichen der Variablennamen,
	sodass es zum eigenen bereits vorhandenen Code passt
	\item Code Snippet im eigenen Code verwenden
\end{enumerate}

Für eine ideale Code Snippet Collection ist somit die Suche der entscheidende
Erfolgsfaktor. Je genauer und treffsicherer die Ergebnisse sind, desto größer
wird die Zeitersparnis durch die Verwendung sein und desto höher auch die
Produktivität. Alle anderen Einflussgrößen sind vom/von der ProgrammiererIn oder
der Qualität der gespeicherten Code Snippets abhängig.
\newline
\newline
Aus diesen Erkenntnissen ergibt sich die Fragestellung: In welcher Struktur
können Code Snippets gespeichert werden, um eine erfolgreiche Suche zu
erreichen?
 
%-----------------------------------------------------------------------------
\section{Problembeschreibung}
%-----------------------------------------------------------------------------
Titel und Beschreibung der Code Snippets werden von den BenutzerInnen teilweise
in deutscher und teilweise in englischer Sprache gespeichert. Gängige
IT-Abkürzungen können entweder abgekürzt oder im vollen Wortlaut abgespeichert
sein. Durch diese beiden Umstände können teilweise mehrere Abfragen notwendig
sein, um das gewünschte Code Snippet zu finden.
\newline
\newline
Aufbauend auf den Ergebnissen der Bachelorarbeit von Bregenzer \cite{Breg11}
soll eine Struktur gefunden werden, in der Code Snippets
abgespeichert werden können, um eine effektive Suche anbieten zu können.


%-----------------------------------------------------------------------------
\subsection{Ist-Zustand}
%-----------------------------------------------------------------------------
In dem Prototyp der Bachelorarbeit erfolgt die Speicherung und Versionierung 
des Codes in einem Git-Repository. Die zusätzlichen Informationen wie
Titel und Beschreibung des Source-Codes, zugeordnete Programmiersprachen und
Tags werden in einer relationalen Datenbank gespeichert \cite[S.2]{Breg11}. Eine Suche mit einem
Suchstring ist nur über den Titel und die Beschreibung möglich. Es besteht
jedoch die Option, das Suchergebnis zusätzlich auf verschiedene
Programmiersprachen und bzw. oder Tags einzuschränken.


%-----------------------------------------------------------------------------
\subsection{Soll-Zustand}
%-----------------------------------------------------------------------------
Zusätzlich zu den im Ist-Zustand beschriebenen Suchoptionen soll auch
eine Suche möglich sein, die intuitiv und bequem ist.
\newline
\newline
Wenn beispielsweise "`Struktur"' als Suchwort eingegeben wird, sollen
nicht nur Code Snippets mit "`struktur"' an beliebiger Stelle in
Titel und/oder Beschreibung gefunden werden, sondern auch Code Snippets, die mit
"`structure"', oder "`structur"' abgespeichert sind.
Oder wenn ein Code Snippets mit "`Embedded SQL"' in der Code Snippets Collection
angelegt wurde, soll es auch bei einer Suche mit "`ESQL"' gefunden werden.
\newline
\newline
Auch soll es möglich sein, nach der Suche das Ergebnis nach
zugeordneten Programmiersprachen oder Tags zusätzlich zu filtern.


%-----------------------------------------------------------------------------
\section{Zielsetzung}
%-----------------------------------------------------------------------------
Die vorliegende Arbeit soll erforschen, wie eine Struktur zur Speicherung von
Code Snippets aussehen muss, damit für das Finden eines Code Snippets
\ldots
\begin{itemize}
  	
  	\item \ldots nicht der genaue Wortlaut des Titels und bzw. oder der
  	Bezeichnung notwendig ist.
  	
  	\item \ldots es keinen Unterschied macht, ob als Suchwort eine gängige
  	IT-Abkürzung oder der volle Wortlaut verwendet wird.
  	
\end{itemize}

Zum Aufbau der Struktur sind folgende Fragen zu klären:
\begin{itemize}
  	
  	\item In welchem Format soll das Speichern erfolgen?
  	\item Wie groß muss der Umfang sein, damit alle benötigten Daten
  	vorhanden sind?
	\item Welche Kategorisierungen machen Sinn?
	\item Wieviel Dokumentation zum Code Snippet ist notwendig?
	\item Ist eine Unterscheidung der Programmiersprachen notwendig und wenn ja,
	wie kann diese realisiert werden?
\end{itemize}

Hierfür werden zuerst verschiedene Suchen analysiert und daraus mögliche
Strukturen abgeleitet. Anschließend wird eine Struktur ausgewählt und in den
bestehenden Prototypen integriert, um die Machbarkeit zu zeigen.



%-----------------------------------------------------------------------------
\subsection{Kriterien zur Erreichung der Zielsetzung}
%-----------------------------------------------------------------------------
Als Kriterium zur Erreichung der Zielsetzung ergibt sich daraus, dass eine
Volltextsuche über Titel, Beschreibung und Source Code möglich sein muss und das
Suchergebnis zusätzlich auf Programmiersprachen und bzw. oder Tags
eingeschränkt werden kann.
